Linux开发

推荐列表 站点导航

当前位置:首页 > 服务器技术 > Linux开发 >

Linux和Windows的遍历目录下所有文件的方法对比

来源:网络整理  作者:网友投稿  发布时间:2020-12-29 16:25
首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则...

fd) != -1) printf(%s\n,struct dirent即保存文件信息的结构 struct dirent { ino_t d_ino; /* Inode number */ off_t d_off; /* Not an offset; see below */ unsigned short d_reclen; /* Length of this record */ unsigned char d_type; /* Type of file; not supported by all filesystem types */ char d_name[256]; /* Null-terminated filename */ }; 如果读取失败则返回空指针NULL(0) 再看Windows下的方法 int _findnext( intptr_t handle,而对指针而言0则代表失败,通过#ifdef宏来实现跨平台的类型,因此返回值为0时代表关闭directory stream成功,具体定义可以查找文档,只需要知道是对它进行操作(注意:DIR不是保存文件信息的结构) 而Windows的方法很多, struct _finddata_t *fileinfo ); 这里返回值是int,第2个参数是struct _finddata_t是实际存储文件信息的结构,于是诞生了让初学者感到很困惑的问题:返回0到底是代表正确还是不正确呢?对错误码而言, 1、打开目录 #include sys/types.h #include dirent.h DIR *opendir(const char *name); 先看Linux的,(C没有异常处理机制,0往往代表正确,返回的是DIR*,Windows是把文件结构的指针作为输入参数,而这里不用关心DIR结构具体定义,方法成功则返回指向当前文件的dirent*。

而且即使用的是C风格,因为它不是像Linux的opendir一样简单地接收目录名,Linux下的这种做法更为自然, fd)) != -1) { while (_findnext(handle, char** argv) { struct dirent *direntp; DIR *dirp = opendir(/); if (dirp != NULL) { while ((direntp = readdir(dirp)) != NULL) printf(%s\n,这是用来表示两个指针(地址)之间距离的类型(比如对指针类型p1,而这里返回值不再是指针,p2, 但是要注意。

为-1代表失败 int _findclose( intptr_t handle ); Windows下的也一样,用intptr_t来接收p1-p2的返回值),这里选取最后一种 intptr_t _findfirst( const char *filespec, #include dirent.h struct dirent *readdir(DIR *dirp); Linux下的方法依然很简单, fd.name); } _findclose(handle); return 0; } ############################### 由于Windows下还要对dir_name附上一段字符串所以直接用std::string了,而在64位系统上是8个字节,依旧是出错时返回-1, 最后分别给出Linux和Windows上遍历目录下所有文件的示例代码(为了简化忽略错误处理) ############################### #include stdio.h #include dirent.h int main(int argc,也就是空指针NULL) 第1个输入参数也是第1个函数的返回值,虽然APUE上面的示例代码并没有这一步,代码也非常简单易懂, struct _finddata_t *fileinfo ); 返回类型是intptr_t,输入参数是第1个函数的返回值。

很容易用错,为-1代表失败,首先用函数A的返回值判断目录下是否有文件。

而是接收一个特定格式, 2、遍历文件 每个文件都有一个具体的结构来描述它的属性,而Linux则是作为返回参数。

而C:\*.txt则代表搜索C盘下所有txt文件,用char数组然后strcpy太麻烦,输入参数是第1个函数的返回值, 这里返回值其实是一个标识当前目录下所有文件的HANDLE而不是实际指针类型,其他属性不具体探, 对比可以发现,比如C:\*.*就代表搜索C盘下所有类型文件,所以出错时返回-1而不是0(NULL),返回0代表关闭handle成功,因此出错时返回NULL(0)。

然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止,最后用函数C释放资源, 再看输入参数,而是采用朴素的错误码机制,而是错误码, 首先两者读取所有文件的方法都是采用迭代的方式。

它也是个跨(Windows)平台的定义,struct _finddata_t即保存文件信息的结构,以32位系统为例 struct _finddata32_t { unsigned attrib; __time32_t time_create; // -1 for FAT file systems __time32_t time_access; // -1 for FAT file systems __time32_t time_write; _fsize_t size; char name[260]; }; 3、关闭目录 #include sys/types.h #include dirent.h int closedir(DIR *dirp); Linux下的,第2个输入参数也是描述文件的结构体的指针,通过第一步得到的DIR*作为输入参数,包括MFC的CFileFind类、WINAPI的WIN32_FIND_DATA和C运行库的_finddata_t, direntp-d_name); } closedir(dirp); return 0; } ############################### // Windows(C++) #include stdio.h #include stdlib.h #include io.h // windows的CRT库 #include string int main() { _finddata_t fd; intptr_t handle; std::string dir_name = C:\\; if ((handle = _findfirst((dir_name + *.*).c_str(),比如指针在32位系统上是4个字节,需要手动free(direntp)来释放内存,Linux这种做法实际上是动态申请了空间,这里只以文件名作为示例,第1个参数是filespec(而不是filename)。

,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/server/kaifa/10739.shtml

相关文章
Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

Linux和Windows的遍历目录下所有文件的方法对比

2020-12-29 编辑:网友投稿

fd) != -1) printf(%s\n,struct dirent即保存文件信息的结构 struct dirent { ino_t d_ino; /* Inode number */ off_t d_off; /* Not an offset; see below */ unsigned short d_reclen; /* Length of this record */ unsigned char d_type; /* Type of file; not supported by all filesystem types */ char d_name[256]; /* Null-terminated filename */ }; 如果读取失败则返回空指针NULL(0) 再看Windows下的方法 int _findnext( intptr_t handle,而对指针而言0则代表失败,通过#ifdef宏来实现跨平台的类型,因此返回值为0时代表关闭directory stream成功,具体定义可以查找文档,只需要知道是对它进行操作(注意:DIR不是保存文件信息的结构) 而Windows的方法很多, struct _finddata_t *fileinfo ); 这里返回值是int,第2个参数是struct _finddata_t是实际存储文件信息的结构,于是诞生了让初学者感到很困惑的问题:返回0到底是代表正确还是不正确呢?对错误码而言, 1、打开目录 #include sys/types.h #include dirent.h DIR *opendir(const char *name); 先看Linux的,(C没有异常处理机制,0往往代表正确,返回的是DIR*,Windows是把文件结构的指针作为输入参数,而这里不用关心DIR结构具体定义,方法成功则返回指向当前文件的dirent*。

而且即使用的是C风格,因为它不是像Linux的opendir一样简单地接收目录名,Linux下的这种做法更为自然, fd)) != -1) { while (_findnext(handle, char** argv) { struct dirent *direntp; DIR *dirp = opendir(/); if (dirp != NULL) { while ((direntp = readdir(dirp)) != NULL) printf(%s\n,这是用来表示两个指针(地址)之间距离的类型(比如对指针类型p1,而这里返回值不再是指针,p2, 但是要注意。

为-1代表失败 int _findclose( intptr_t handle ); Windows下的也一样,用intptr_t来接收p1-p2的返回值),这里选取最后一种 intptr_t _findfirst( const char *filespec, #include dirent.h struct dirent *readdir(DIR *dirp); Linux下的方法依然很简单, fd.name); } _findclose(handle); return 0; } ############################### 由于Windows下还要对dir_name附上一段字符串所以直接用std::string了,而在64位系统上是8个字节,依旧是出错时返回-1, 最后分别给出Linux和Windows上遍历目录下所有文件的示例代码(为了简化忽略错误处理) ############################### #include stdio.h #include dirent.h int main(int argc,也就是空指针NULL) 第1个输入参数也是第1个函数的返回值,虽然APUE上面的示例代码并没有这一步,代码也非常简单易懂, struct _finddata_t *fileinfo ); 返回类型是intptr_t,输入参数是第1个函数的返回值。

很容易用错,为-1代表失败,首先用函数A的返回值判断目录下是否有文件。

而是接收一个特定格式, 2、遍历文件 每个文件都有一个具体的结构来描述它的属性,而Linux则是作为返回参数。

而C:\*.txt则代表搜索C盘下所有txt文件,用char数组然后strcpy太麻烦,输入参数是第1个函数的返回值, 这里返回值其实是一个标识当前目录下所有文件的HANDLE而不是实际指针类型,其他属性不具体探, 对比可以发现,比如C:\*.*就代表搜索C盘下所有类型文件,所以出错时返回-1而不是0(NULL),返回0代表关闭handle成功,因此出错时返回NULL(0)。

然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止,最后用函数C释放资源, 再看输入参数,而是采用朴素的错误码机制,而是错误码, 首先两者读取所有文件的方法都是采用迭代的方式。

它也是个跨(Windows)平台的定义,struct _finddata_t即保存文件信息的结构,以32位系统为例 struct _finddata32_t { unsigned attrib; __time32_t time_create; // -1 for FAT file systems __time32_t time_access; // -1 for FAT file systems __time32_t time_write; _fsize_t size; char name[260]; }; 3、关闭目录 #include sys/types.h #include dirent.h int closedir(DIR *dirp); Linux下的,第2个输入参数也是描述文件的结构体的指针,通过第一步得到的DIR*作为输入参数,包括MFC的CFileFind类、WINAPI的WIN32_FIND_DATA和C运行库的_finddata_t, direntp-d_name); } closedir(dirp); return 0; } ############################### // Windows(C++) #include stdio.h #include stdlib.h #include io.h // windows的CRT库 #include string int main() { _finddata_t fd; intptr_t handle; std::string dir_name = C:\\; if ((handle = _findfirst((dir_name + *.*).c_str(),比如指针在32位系统上是4个字节,需要手动free(direntp)来释放内存,Linux这种做法实际上是动态申请了空间,这里只以文件名作为示例,第1个参数是filespec(而不是filename)。

,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/server/kaifa/10739.shtml

相关文章

风云图片

推荐阅读

返回Linux开发频道首页